#===============================================================================
# Koro Business Environment
# Copyright (C) 2008  Antonio Corroppoli
#
#This file is part of Koro BE.
# 
# Koro BE is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# Koro BE is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with Koro BE; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
#===============================================================================

'''
Created on 12/ago/2011

@author: antstud
'''

import wx
from koro.util import to_bool,to_string
from koro.ui.wxgui.panels import BasePanel,OpzioniPanelBase
from koro.ui.wxgui.widgets import controls as co
from koro.ui.wxgui.mellcfg import mDefaultBorder

#===============================================================================
# DatiCommercialiPanel
#===============================================================================
class DatiCommercialiPanel(BasePanel):
    def __init__(self,*args,**kwargs):
        super(DatiCommercialiPanel,self).__init__(*args,**kwargs)
        self.__do_layout()
        #self.fill_combobox()
    
    def __do_layout(self):
        topsizer=wx.BoxSizer(wx.VERTICAL)
        
#        self.pagamento = wx.ComboBox(id=wx.NewId(),parent=self,size=wx.Size(197, 25),style=wx.CB_READONLY)
#        topsizer.Add(co.CompositeCtrl(self.pagamento,label='Tipo Pagamento'),0,wx.ALL,border=mDefaultBorder)
        if self.wrapper.is_anagrafica_clienti():
            self.listino = co.ListinoCtrl(self)
            topsizer.Add(self.listino,0,wx.ALL,border=mDefaultBorder)
        
        self.iva = co.IvaCtrl(self)
        topsizer.Add(self.iva,0,wx.ALL,border=mDefaultBorder)

        self.sconti = co.LabelTextCtrl(self,label='Sconti',size=(100,-1), maxlen=20)
        topsizer.Add(self.sconti,0,wx.ALL,border=mDefaultBorder)   
        
        self.set_main_sizer(topsizer)
        #self.SetSizer(topsizer)
        self.SetAutoLayout(True)
        
    
    def update_fields(self,obj):
        print 'DatiCommercialiPanel.update_fields'
        if self.wrapper.is_anagrafica_clienti():
            listino_cli=obj.get_listino()        
            self.listino.set_value(listino_cli)        
        iva_cli=obj.get_iva()        
        self.iva.set_value(iva_cli)
        self.sconti.set_value(obj.sconti)                        

    def update_object(self,obj):
        print 'DatiCommercialiPanel.update_object'
        if self.wrapper.is_anagrafica_clienti():
            obj.set_listino(self.listino.get_selected_object())
        obj.set_iva(self.iva.get_selected_object())
        obj.set_sconti(self.sconti.get_value())        
              
    def reset_fields(self):
        print 'AnagraficaPanel.reset_fields'
        if self.wrapper.is_anagrafica_clienti():
            self.listino.clear()
        self.iva.clear()
        self.sconti.clear()
    
#    def fill_combobox(self):        
#        observer=wx.GetApp().get_observer()
#        #listini
#        observer.set_context('LISTINI')
#        objects=observer.get_objects()
#        self.listino.load(objects)
#        #codici_iva
#        observer.set_context('ALIQUOTE_IVA')
#        objects=observer.get_objects()
#        self.iva.load(objects)


#===============================================================================
# GeneralePanel
#===============================================================================
class CommercialeOptionPanel(OpzioniPanelBase):
    NAME='Commerciale'
    def __init__(self,*args,**kwargs):
        OpzioniPanelBase.__init__(self,*args,**kwargs)
        self.__do_layout()
        self.__bind()              
           
    def __do_layout(self):
        mainsizer=wx.BoxSizer(wx.HORIZONTAL)
        #fieldsizer = wx.GridBagSizer(0,0)
        
        boxsizer=wx.BoxSizer(wx.VERTICAL)        
                
        #liste codici listini
#        listini=self._request_listini()
#        #choices_f=[]
#        choices_listini=[]
#        for listino_ in listini:
##            if not listino_.has_flag_ricarico():
##                choices_f.append(listino_.codice)
#            choices_listini.append(listino_.codice)
#        ##lista codici iva
#        choices_iva=[]    
#        codiva=self._request_codici_iva()
#        for cod in codiva:
#            choices_iva.append(cod.codice)
                 
        titolo=wx.StaticText(self,label="Listini")
        font=titolo.GetFont()
        font.SetWeight(wx.FONTWEIGHT_BOLD)
        titolo.SetFont(font)
        boxsizer.Add(titolo,0,wx.ALL,border=mDefaultBorder)
        boxsizer.AddSpacer(5)
#        self.vis_prezzo_forn = wx.CheckBox(parent=self,id=wx.NewId(),label="Visualizza prezzo fornitore nelle vendite ",style=wx.ALIGN_RIGHT)
#        boxsizer.Add(self.vis_prezzo_forn,0,wx.TOP|wx.RIGHT,border=mDefaultBorder)
#        
#        self.prezzi_ivati = wx.CheckBox(parent=self,id=wx.NewId(),label="Lavora con prezzi ivati ",style=wx.ALIGN_RIGHT)
#        boxsizer.Add(self.prezzi_ivati,0,wx.TOP|wx.RIGHT,border=mDefaultBorder)
#        self.prezzi_ivati.Enable(False)
        
#        self.default_listforn_ctrl = co.Choice(parent=self,size=(197, 25),choices=choices_listini)
#        self.default_listforn=co.LabeledCtrl(self,control=self.default_listforn_ctrl,label='Listino fornitore (default) ',label_size=(-1,-1))
#        boxsizer.Add(self.default_listforn,0,wx.ALL,border=mDefaultBorder)
        
        
        self.default_listcli=co.ListinoCtrl(self,label='Listino cliente (default) ')
        boxsizer.Add(self.default_listcli,0,wx.ALL,border=mDefaultBorder)
                
        self.default_iva=co.IvaCtrl(self,label='Iva (default) ')
        boxsizer.Add(self.default_iva,0,wx.ALL,border=mDefaultBorder)
        
        boxsizer.AddSpacer(20)
        
        titolo=wx.StaticText(self,label="Arrotondamenti")
        font=titolo.GetFont()
        font.SetWeight(wx.FONTWEIGHT_BOLD)
        titolo.SetFont(font)
        boxsizer.Add(titolo,0,wx.ALL,border=mDefaultBorder)
        boxsizer.AddSpacer(5)
        
        choices=['Per eccesso  ','Per difetto  ','Non arrotondare']
        self.round_values=[u'up',u'down',u'no']
        self.rb = wx.RadioBox(
                self, -1, "Arrotonda", wx.DefaultPosition, wx.DefaultSize,
                choices, 3, wx.RA_SPECIFY_COLS
                )
        boxsizer.Add(self.rb,0,border=mDefaultBorder)
        
        mainsizer.Add(boxsizer,0,flag=wx.ALL|wx.EXPAND ,border=10)#riga zero colonna 1
        
        mainsizer.AddSpacer(100)
        
        boxsizer=wx.BoxSizer(wx.VERTICAL)
        boxsizer.AddSpacer(10)
        titolo=wx.StaticText(self,label="Calcolatrice")
        font=titolo.GetFont()
        font.SetWeight(wx.FONTWEIGHT_BOLD)
        titolo.SetFont(font)
        boxsizer.Add(titolo,0,wx.ALL,border=mDefaultBorder)
        boxsizer.AddSpacer(5)
                
        self.calc = wx.CheckBox(parent=self,id=wx.NewId(),label="Abilita Calcolatrice",style=wx.ALIGN_RIGHT)
        boxsizer.Add(self.calc,0,wx.TOP|wx.RIGHT,border=mDefaultBorder)
        
        self.calc_cmd=co.LabelTextCtrl(self,size=(100,-1),label='Comando di sistema')
        boxsizer.Add(self.calc_cmd,0,wx.ALL,border=mDefaultBorder)
        
        mainsizer.Add(boxsizer,0,flag=wx.ALL|wx.EXPAND ,border=10)#riga zero colonna 1        
        
        mainsizer.Layout()
        self.SetAutoLayout(True)
    
#    def _request_listini(self,*args,**kwargs):
#        observer=wx.GetApp().get_observer()
#        observer.set_context('LISTINI')
#        return observer.get_objects(*args,**kwargs)
#    
#    def _request_codici_iva(self):
#        observer=wx.GetApp().get_observer()
#        observer.set_context('ALIQUOTE_IVA')
#        objects=observer.get_objects()
#        return objects
    
    def __bind(self):
        self.Bind(wx.EVT_CHECKBOX, self.on_check_calc,id=self.calc.Id)
    
    def on_check_calc(self,evt):
        self.calc_cmd.enable(self.calc.IsChecked())
    
    def update_fields(self,opzioni):
        print 'Generale.update_fields'
        #self.gestione_magazzino.SetValue(to_bool(opzioni.GESTIONE_MAGAZZINO))
        #self.vendite_banco.SetValue(to_bool(opzioni.VENDITE_AL_BANCO))
        self.calc.SetValue(to_bool(opzioni.CALC))
        self.calc_cmd.set_value(opzioni.CALC_CMD)
        self.on_check_calc(None)
        #self.vis_prezzo_forn.SetValue(to_bool(opzioni.MOSTRA_PREZZO_FORN))
        #self.prezzi_ivati.SetValue(to_bool(opzioni.PREZZI_IVATI))
        #self.default_listforn_ctrl.SetStringSelection(opzioni.LISTINO_DEFAULT_ACQUISTO)
        self.default_listcli.set_string_selection(opzioni.LISTINO_DEFAULT_VENDITA_NAME)
        self.default_iva.set_string_selection(opzioni.IVA_DEFAULT)
        self.rb.SetSelection(self.round_values.index((opzioni.ROUND or 'up')))
    
    def reset_fields(self):#non serve
        print 'Generale.reset_fields'
#        self.gestione_magazzino.SetValue(False)
#        self.vendite_banco.SetValue(False)
    
    def update_object(self,opzioni):
        print 'Generale.update_object'
        #opzioni.GESTIONE_MAGAZZINO=to_string(self.gestione_magazzino.GetValue())
        #opzioni.VENDITE_AL_BANCO=to_string(self.vendite_banco.GetValue())
        opzioni.CALC=to_string(self.calc.GetValue())
        opzioni.CALC_CMD=self.calc_cmd.get_value()
        #opzioni.MOSTRA_PREZZO_FORN=to_string(self.vis_prezzo_forn.GetValue())
        #opzioni.PREZZI_IVATI=to_string(self.prezzi_ivati.GetValue())
        #opzioni.LISTINO_DEFAULT_ACQUISTO=self.default_listforn_ctrl.GetStringSelection()
        opzioni.LISTINO_DEFAULT_VENDITA=self.default_listcli.get_selected_object().ID
        opzioni.LISTINO_DEFAULT_VENDITA_NAME=self.default_listcli.get_string_selection()
        opzioni.IVA_DEFAULT=self.default_iva.get_string_selection()
        opzioni.ROUND=self.round_values[self.rb.GetSelection()]
    
    def before_close(self,observer):
        pass